001 /* 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: 2002-8-22 005 * Time: 20:04:38 006 */ 007 package EVolve.util.batchutils; 008 009 import java.awt.*; 010 import java.awt.event.*; 011 import java.util.*; 012 import javax.swing.*; 013 import javax.swing.filechooser.*; 014 import java.io.*; 015 import EVolve.*; 016 import EVolve.exceptions.EVolveException; 017 import EVolve.util.batchutils.BatchInfo; 018 import EVolve.util.predefinedutils.VizInfo; 019 import EVolve.util.predefinedutils.VisualizationSerializer; 020 import EVolve.util.predefinedutils.SerializerInfo; 021 import EVolve.visualization.VizFactory.VisualizationFactory; 022 023 public class BatchRunner { 024 private JDialog dialog; 025 private java.awt.List fileList; 026 private java.awt.List procList; 027 private Frame owner; 028 private HashSet setFile; 029 private HashSet setProcessFiles; 030 private HashMap batches; 031 private HashMap mapConfig; 032 private JTextField txtConfName; 033 034 public BatchRunner() { 035 owner = Scene.getFrame(); 036 setFile = new HashSet(); 037 setProcessFiles = new HashSet(); 038 batches = new HashMap(); 039 mapConfig = new HashMap(); 040 } 041 042 public void showWindow() { 043 if (dialog == null) { 044 createDialog(); 045 Scene.getUIManager().showDialog(dialog, dialog.getWidth(), dialog.getHeight()); 046 } 047 else dialog.setVisible(true); 048 } 049 050 public void runBatch() { 051 int iBatchNum = batches.keySet().size(); 052 Iterator it = batches.keySet().iterator(); 053 BatchInfo batchInfo; 054 055 if (iBatchNum <= 0) { 056 Scene.showErrorMessage("No batch available!"); 057 return; 058 } 059 060 while (it.hasNext()) { 061 String outPath,dataFileName,batchName = (String) it.next(); 062 VizInfo vizInfo = null; 063 Iterator it2; 064 batchInfo = (BatchInfo) batches.get(batchName); 065 066 // read in configure file 067 try { 068 it2 = batchInfo.getTraceFileList().iterator(); 069 dataFileName = (String) it2.next(); 070 Scene.setDataFilename(dataFileName); 071 Scene.autoLoadDataSource(); 072 073 SerializerInfo info = VisualizationSerializer.v().getVizInfoFromDisk(batchInfo.getConfigureFile()); 074 vizInfo = (VizInfo)info.vizInfoList.get(0); 075 mapConfig.put("Factory",vizInfo.getFactory()); 076 mapConfig.put("Subject",vizInfo.getSubject()); 077 mapConfig.put("Dimension",vizInfo.getDimension()); 078 mapConfig.put("Predictor",vizInfo.getPredictor()); 079 mapConfig.put("Interval",new Integer(vizInfo.getInterval())); 080 mapConfig.put("BeginCall",new Long(vizInfo.getBeginCall())); 081 mapConfig.put("EndCall",new Long(vizInfo.getEndCall())); 082 mapConfig.put("Match",new Float(vizInfo.getMatch())); 083 mapConfig.put("Options", vizInfo.getOptions()); 084 outPath = info.resultPath; 085 086 execCmd(outPath,dataFileName); 087 } catch (EVolveException e) { 088 Scene.showErrorMessage(e.getMessage()); 089 continue; 090 } 091 092 while (it2.hasNext()) { 093 // load data file first 094 dataFileName = (String)it2.next(); 095 Scene.setDataFilename(dataFileName); 096 Scene.autoLoadDataSource(); 097 execCmd(outPath,dataFileName); 098 } 099 100 vizInfo.reset(); 101 mapConfig.clear(); 102 } // end of while(it) 103 batches.clear(); 104 Scene.setDataFilename(null); 105 } 106 107 private void execCmd(String path,String dataFn) { 108 Scene.getVisualizationManager().newVisualization(((VisualizationFactory)mapConfig.get("Factory")).getName()); 109 110 Scene.getVisualizationManager().autoPreVisualize(mapConfig); 111 Scene.autoVisualize(); 112 Scene.getVisualizationManager().autoSaveResult(path,dataFn); 113 114 } 115 116 private void createDialog(){ 117 dialog = new JDialog(owner,"Create Batch",true); 118 dialog.setBounds(new Rectangle(500,400)); 119 120 JPanel batchName = new JPanel(new FlowLayout()); 121 dialog.getContentPane().add(batchName,BorderLayout.NORTH); 122 123 Box boxMain = new Box(BoxLayout.Y_AXIS); 124 boxMain.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), 125 "Choose file(s) to be processed & Processing configuration")); 126 dialog.getContentPane().add(boxMain,BorderLayout.CENTER); 127 128 129 Box boxLabels = new Box(BoxLayout.X_AXIS); 130 JButton buttonGetDir = new JButton("Select Directory .."); 131 buttonGetDir.addActionListener(new ActionListener(){ 132 public void actionPerformed(ActionEvent e){ 133 fillFileList(); 134 } 135 }); 136 boxLabels.add(buttonGetDir); 137 boxLabels.add(Box.createHorizontalGlue()); 138 boxLabels.add(new JLabel("Processing List ")); 139 140 Box boxLists = new Box(BoxLayout.X_AXIS); 141 fileList = new java.awt.List(8,true); 142 143 Box boxAddRemove = new Box(BoxLayout.Y_AXIS); 144 JButton buttonAdd = new JButton(" > "); 145 buttonAdd.addActionListener(new ActionListener(){ 146 public void actionPerformed(ActionEvent e){ 147 addFiles(); 148 } 149 }); 150 JButton buttonRemove = new JButton(" < "); 151 buttonRemove.addActionListener(new ActionListener(){ 152 public void actionPerformed(ActionEvent e){ 153 removeFiles(); 154 } 155 }); 156 boxAddRemove.add(Box.createVerticalStrut(40)); 157 boxAddRemove.add(buttonAdd); 158 boxAddRemove.add(Box.createVerticalStrut(20)); 159 boxAddRemove.add(buttonRemove); 160 161 procList = new java.awt.List(8,true); 162 boxLists.add(fileList); 163 boxLists.add(Box.createHorizontalStrut(40)); 164 boxLists.add(boxAddRemove); 165 boxLists.add(procList); 166 167 boxMain.add(boxLabels); 168 boxMain.add(Box.createVerticalStrut(5)); 169 boxMain.add(boxLists); 170 171 Box boxConfig = new Box(BoxLayout.X_AXIS); 172 boxConfig.add(new JLabel("Choose configure file:")); 173 txtConfName = new JTextField(12); 174 boxConfig.add(Box.createHorizontalStrut(20)); 175 boxConfig.add(txtConfName,BorderLayout.CENTER); 176 JButton buttonConfig = new JButton("..."); 177 buttonConfig.addActionListener(new ActionListener(){ 178 public void actionPerformed(ActionEvent e){ 179 txtConfName.setText(chooseConfig()); 180 } 181 }); 182 boxConfig.add(buttonConfig,BorderLayout.EAST); 183 184 Box boxOkCancel = new Box(BoxLayout.X_AXIS); 185 JButton buttonOK = new JButton("OK"); 186 JButton buttonCancel = new JButton("Cancel"); 187 188 buttonOK.addActionListener(new ActionListener(){ 189 public void actionPerformed(ActionEvent e){ 190 onOK(); 191 } 192 }); 193 buttonCancel.addActionListener(new ActionListener(){ 194 public void actionPerformed(ActionEvent e){ 195 onCancel(); 196 } 197 }); 198 boxOkCancel.add(Box.createHorizontalStrut(30)); 199 boxOkCancel.add(buttonOK); 200 boxOkCancel.add(Box.createHorizontalStrut(20)); 201 boxOkCancel.add(buttonCancel); 202 203 Box boxBottom = Box.createVerticalBox(); 204 boxBottom.add(Box.createVerticalStrut(12)); 205 boxBottom.add(boxConfig); 206 boxBottom.add(Box.createVerticalStrut(40)); 207 boxBottom.add(boxOkCancel); 208 209 210 dialog.getContentPane().add(boxBottom,BorderLayout.SOUTH); 211 //dialog.setResizable(false); 212 } 213 214 private void clearList() { 215 fileList.removeAll(); 216 procList.removeAll(); 217 setFile.clear(); 218 setProcessFiles.clear(); 219 } 220 221 private void onOK() { 222 BatchInfo batchInfo = new BatchInfo(); 223 224 if (txtConfName.getText().trim().length() == 0) { 225 Scene.showErrorMessage("No configuration file selected!"); 226 return; 227 } 228 229 if (setProcessFiles.size() == 0) { 230 Scene.showErrorMessage("Select file(s) to be processed please!"); 231 return; 232 } 233 234 batchInfo.setConfigureFile(txtConfName.getText().trim()); 235 batchInfo.setTraceFileList(setProcessFiles); 236 batches.put("Batch "+batches.entrySet().size(),batchInfo); 237 dialog.setVisible(false); 238 clearList(); 239 } 240 241 private void onCancel() { 242 dialog.setVisible(false); 243 clearList(); 244 } 245 246 private String chooseConfig() { 247 JFileChooser fc = new JFileChooser(Scene.getUIManager().getLastConfigDir()); 248 249 if(fc.showOpenDialog(owner) == JFileChooser.APPROVE_OPTION) { 250 File f = fc.getSelectedFile(); 251 Scene.getUIManager().setLastConfigDir(f.getPath()); 252 return (f.getPath()); 253 } 254 else return ""; 255 } 256 257 private void addFiles() { 258 String[] selItems = fileList.getSelectedItems(); 259 260 for (int i=0;i<selItems.length;i++) { 261 if (setProcessFiles.contains(selItems[i])) continue; 262 263 setProcessFiles.add(selItems[i]); 264 procList.add(selItems[i]); 265 } 266 } 267 268 private void removeFiles() { 269 String[] selItems = procList.getSelectedItems(); 270 271 for (int i=0;i<selItems.length;i++) { 272 setProcessFiles.remove(selItems[i]); 273 procList.remove(selItems[i]); 274 } 275 } 276 277 private void fillFileList() { 278 JFileChooser fc = new JFileChooser(); 279 String path; 280 281 fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 282 283 if(fc.showOpenDialog(Scene.getFrame()) == JFileChooser.APPROVE_OPTION) { 284 path = fc.getSelectedFile().getAbsolutePath(); 285 File dir = new File(path); 286 FileSystemView fv = fc.getFileSystemView(); 287 File[] fl = fv.getFiles(dir,false); 288 for (int i=0;i<fl.length;i++) { 289 String fn = fl[i].getName(); 290 if (!fl[i].isFile() || !fn.endsWith(".dat") || setFile.contains(path+File.separator+fn)) 291 continue; 292 setFile.add(path+File.separator+fn); 293 fileList.add(path+File.separator+fn); 294 } 295 } 296 297 } 298 299 }